package jpb.util;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

/**
 * Created by haol on 2017/4/22.
 */
public final class NetworkUtil {
        /**
         * Logger for this class
         */
        private static Logger logger = LoggerFactory.getLogger(NetworkUtil.class);

        /**
         * 获取请求主机IP地址,如果通过代理进来，则透过防火墙获取真实IP地址;
         *
         * @param request
         * @return
         * @throws IOException
         */
        public final static String getIpAddress(HttpServletRequest request) {
                try {
                        // 获取请求主机IP地址,如果通过代理进来，则透过防火墙获取真实IP地址

                        String ip = request.getHeader("X-Forwarded-For");

                        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
                                if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
                                        ip = request.getHeader("Proxy-Client-IP");
                                }
                                if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
                                        ip = request.getHeader("WL-Proxy-Client-IP");
                                }
                                if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
                                        ip = request.getHeader("HTTP_CLIENT_IP");
                                }
                                if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
                                        ip = request.getHeader("HTTP_X_FORWARDED_FOR");
                                }
                                if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
                                        ip = request.getRemoteAddr();
                                }
                        } else if (ip.length() > 15) {
                                String[] ips = ip.split(",");
                                for (int index = 0; index < ips.length; index++) {
                                        String strIp = (String) ips[index];
                                        if (!("unknown".equalsIgnoreCase(strIp))) {
                                                ip = strIp;
                                                break;
                                        }
                                }
                        }
                        return ip;
                }catch (Exception e){
                        logger.error(e.getMessage());
                        return null;
                }

        }
}